package cn.aloxc.stock.tools;

public class StringUtil {
    
    public static void main(String args[])
    {
        String gb = "&#x673A;&#x6784;&#x51C0;&#x6D41;&#x5165;,&#x6563;&#x6237;&#x51C0;&#x6D41;&#x5165;";
        gb = StringUtil.unicodeToGB2312(gb);
       System.out.println(gb);
    }
    public static String unicodeToGB2312(String src)
    {
        src = src.replaceAll("&#x","%u").replaceAll(";","");
        return StringUtil.unescape(src);
    }
 public static String unescape(String src) {
         StringBuffer tmp = new StringBuffer();
         tmp.ensureCapacity(src.length());
         int lastPos = 0, pos = 0;
         char ch;
         while (lastPos < src.length()) {
             pos = src.indexOf("%", lastPos);
             if (pos == lastPos) {
                 if (src.charAt(pos + 1) == 'u') {
                     ch = (char) Integer.parseInt(src
                             .substring(pos + 2, pos + 6), 16);
                     tmp.append(ch);
                     lastPos = pos + 6;
                 } else {
                     ch = (char) Integer.parseInt(src
                             .substring(pos + 1, pos + 3), 16);
                     tmp.append(ch);
                     lastPos = pos + 3;
                 }
             } else {
                 if (pos == -1) {
                     tmp.append(src.substring(lastPos));
                     lastPos = src.length();
                 } else {
                     tmp.append(src.substring(lastPos, pos));
                     lastPos = pos;
                 }
             }
         }
         return tmp.toString();
     }       
         public static String escape(String src) {
         int i;
         char j;
         StringBuffer tmp = new StringBuffer();
         tmp.ensureCapacity(src.length() * 6);
         for (i = 0; i < src.length(); i++) {
             j = src.charAt(i);
             if (Character.isDigit(j) || Character.isLowerCase(j)
                     || Character.isUpperCase(j))
                 tmp.append(j);
             else if (j < 256) {
                 tmp.append("%");
                 if (j < 16)
                     tmp.append("0");
                 tmp.append(Integer.toString(j, 16));
             } else {
                 tmp.append("%u");
                 tmp.append(Integer.toString(j, 16));
             }
         }
         return tmp.toString();
     }
    public static  String gb2312ToUnicode(final String sourceString)
	{
		char[] utfBytes = sourceString.toCharArray();
		String strUnicode = "";

		for (int byteIndex = 0; byteIndex < utfBytes.length; byteIndex++)
		{
			char c = utfBytes[byteIndex];
			int intAsc = (int) c;
			String hexB = Integer.toHexString(c);

			if (intAsc > 128)
			{
				if (hexB.length() <= 2)
				{
					hexB = "00" + hexB;
				}
				strUnicode = strUnicode + "&#x" + hexB + ";";
			} else
			{
				// strRet = strRet + c;
				strUnicode = strUnicode + c;
			}

		}
		return strUnicode;
	}
}
